// 封装请求拦截器
import store from "@/store";
// 在发出请求后 如果800毫秒内 数据没回来则显示加载中 否则不显示
let timeId;
const baseURL = "https://pcapi-xiaotuxian-front-devtest.itheima.net";
const request = {
    // 请求发送前
    invoke(args) {
        clearInterval(timeId)
        timeId = setTimeout(() => {
            uni.showLoading({ title: "加载中" });
        }, 800);

        if (!args.url.startsWith("http")) { // startsWith() 方法用于检测字符串是否以指定的前缀开始
            args.url = baseURL + args.url;
        }

        // 为对象添加一个属性 方式一
        // args.header.sourceClient = "miniapp"

        // 为对象添加一个属性 方式二 
        args.header = {
            ...args.header, // 保留原本的 header
            "source-client": "miniapp", // 添加小程序端调用标识
        };
        // 判断一下有没有token 有 就携带
        if (store.state.user.profile) {
            args.header.Authorization = store.state.user.profile.token;
        }
    },
    // 请求完成后
    complete(res) {
        clearInterval(timeId)
        uni.hideLoading(); // 关闭加载中
    },
};
uni.addInterceptor("request", request); // 请求拦截器
uni.addInterceptor("uploadFile", request);

export default (options) => {
    return new Promise((resolve, reject) => {
        uni.request({
            ...options,
            success(res) {
                if (res.statusCode >= 200 && res.statusCode < 300) {
                    resolve(res.data);
                } else {
                    // 多做一次判断
                    if (res.statusCode === 401) {
                        // 跳转到 登录页面
                        uni.navigateTo({ url: "/pages/login/index" });
                    }
                    reject(res);
                }
            },
            fail(err) {
                reject(err);
            },
        });
    });
};